// $Id: table.h,v 1.4 2006-09-07 07:26:45 nicolasw Exp $

#ifndef TABLE_H
#define TABLE_H
#define __DEBUG
/*
 * TAD Tabla
 * Implementa un tipo algebraico funcion f:[0,N) -> Objeto 
 * como una tabla de tama#o fijo de punteros a objetos
 * 
 * Las operaciones basicas son: 
 * 	. definir un punto del dominio (table_alloc),
 * 	. ver si un punto del dominio esta definido (table_isdef),
 * 	. aplicar la funcion a un punto (table_get),
 * 	. indefinir un punto del dominio (table_release),
 * 	. asi como funciones que dan el tama~no del dominio y del dominio
 * 	  definido (table_size, table_allocated).
 *
 * El invariante basico de represenacion es
 * 	f(i) = o  <=> _table[i] = o
 * 
 * Notar que resulta _ineficiente_ para funciones "ralas",
 * es decir para tablas con pocos objetos definidos.
 * 
 */





#define table struct table_s*
typedef int object;

void yield(void);
table table_create(const unsigned int size);
table table_destroy(table t);
unsigned int table_size(const table t);
unsigned int table_allocated(table t);
unsigned int table_alloc(table t, object* o);
bool table_is_def(const table t, const unsigned int index);
object* table_get(const table t, const unsigned int index);
void table_release(table t, const unsigned int index);
bool table_getted (table tbl, int idx);
#endif
